\section{Application Programming Interface and Plugins}\label{sec:API}
\fancyfoot[C]{Application Programming Interface and Plugins}
The Application Programming Interface (``API'') below is available to the CMS and any attached plugins. It allows for standardized access to core CMS functionality without exposing undo access privileges to protected or critical core CMS services.
\newline \newline This section details Priority 2 requirement 3.6.1 from the SRS, so they may or may not appear in preliminary releases of Siberia CMS. Additionally, the API detailed here may be expanded with additional functionality and implemented in the CMS, per Priority 2 requirement 3.6.2.
%User management
%Content management
%Content Type management
\subsection{User Management}
\subsubsection{GetUser}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{GetUser(UID UserID)} \\
\hline
Input & UserID A User's unique identifier. \\ \hline
Output & A reference to a User object that matches the unique identifier.\\ \hline
Description & Interface for the User tables in the Data Layer.\\ \hline
\end{tabular}
\linebreak
\subsubsection{SetUser}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{SetUser(User User)} \\
\hline
Input & User A reference to a User object. \\ \hline
Output & A boolean value specifying if the operation was successful.\\ \hline
Description & Interface for the User tables in the Data Layer.\\ \hline
\end{tabular}
\linebreak
\subsubsection{GetUserType}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{GetUserType(UID UserTypeID)} \\
\hline
Input & UserTypeID A User Type's unique identifier. \\ \hline
Output & A reference to a User Type object that matches the unique identifier.\\ \hline
Description & Interface for the User Type tables in the Data Layer.\\ \hline
\end{tabular}
\linebreak
\subsubsection{SetUserType}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{SetUserType(UserType UserType)} \\
\hline
Input & UserType A reference to a User Type object. \\ \hline
Output & A boolean value specifying if the operation was successful.\\ \hline
Description & Interface for the User Type tables in the Data Layer.\\ \hline
\end{tabular}
\linebreak
\subsubsection{GetRole}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{GetRole(UID RoleID)} \\
\hline
Input & RoleID: A Role's unique identifier. \\ \hline
Output & A reference to a Role object that matches the unique identifier.\\ \hline
Description & Interface for the Role tables in the Data Layer.\\ \hline
\end{tabular}
\linebreak

\subsubsection{SetRole}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{SetRole(Role Role)} \\
\hline
Input & Role A reference to a Role object. \\ \hline
Output & A boolean value specifying if the operation was successful.\\ \hline
Description & Interface for the Role tables in the Data Layer.\\ \hline
\end{tabular}
\linebreak

\subsection{Content Management}
\subsubsection{GetContent}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{GetContent(UID ContentID)} \\
\hline
Input & ContentID: A Content's unique identifier. \\ \hline
Output & A reference to a Content object that matches the unique identifier.\\ \hline
Description & Interface for the Content tables in the Data Layer.\\ \hline
\end{tabular}
\linebreak

\subsubsection{SetContent}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{SetContent(Content Content)} \\
\hline
Input & Content A reference to a Content object. \\ \hline
Output & A boolean value specifying if the operation was successful.\\ \hline
Description & Interface for the Content tables in the Data Layer.\\ \hline
\end{tabular}
\linebreak
\subsubsection{GetContentType}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{GetContentType(UID ContentTypeID)} \\
\hline
Input & ContentTypeID: A Content Type's unique identifier. \\ \hline
Output & A reference to a Content Type object that matches the unique identifier.\\ \hline
Description & Interface for the Content Type tables in the Data Layer.\\ \hline
\end{tabular}
\linebreak
\subsubsection{SetContentType}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{SetContentType(ContentType ContentType)} \\
\hline
Input & ContentType A reference to a Content Type object. \\ \hline
Output & A boolean value specifying if the operation was successful.\\ \hline
Description & Interface for the Content Type tables in the Data Layer.\\ \hline
\end{tabular}
\linebreak

\subsubsection{MakeTable}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{MakeTable(String[ ] colnames)} \\
\hline
Input & colnames: Names for each column in the database table to be created.\hbreak
Output & Calls Data Layer methods to create a new data table wtih columns.\hbreak
Description & For the creation of arbitrary tables that cannot be represented as Content.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\subsection{Table Management}
\subsubsection{MakeRow}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{MakeRow(Object[ ] Args, String Table\_Name)} \\
\hline
Input & Args/Table\_Name: An Object[ ] of items to be written to a row in table Table\_Name.\hbreak
Output & Calls Data Layer methods to create a new row with serialized Object[ ] in Table\_Name.\hbreak
Description & For creating individual entries in a table.\hbreak
\end{tabular}

\subsubsection{DeleteRow}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{DeleteRow(Object Arg, String Table\_Name)} \\
\hline
Input & Arg/Table\_Name: An Object whose counterpart in table Table\_Name is to be removed.\hbreak
Output & Calls Data Layer methods to remove the row containing Arg in table Table\_Name.\hbreak
Description & For removing individual entries in a table.\hbreak
\end{tabular}
\linebreak
\vspace{2em}
\linebreak
\vspace{2em}
